/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.hochschild.sgv.util;

import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;


/**
 *
 * @author Christian Alexander Morales Vargas (cmorales.corporacion@gmail.com)
 */
public class FechaUtil {

	public static long NUMERO_BASE_RELOJ = 60; // numero base usado en reloj
	public static long NUMERO_BASE_MILISEGUNDOS = 1000; // numero base usado en

	public static int FECHA_INICIO_ACTIVIDADES = 1;
	public static int FECHA_FIN_ACTIVIDADES = 2;
        //Las clases java.util.Date y java.sql.Date
public static String fechaActual(){
    Date d= new Date();
    SimpleDateFormat df = new SimpleDateFormat ("dd-MM-yyyy");   
    return df.format(d);
}   
public static String fechaActualDDMMYYYYhhmmss() {
        // convert Date to Calendar
        java.util.Calendar cal = java.util.Calendar.getInstance();
        return FechaUtil.calendarToString(cal, 1);
}

public static String dateToString(java.util.Date d) {
        if (d == null)
                return "00/00/0000";

        // convert Date to Calendar
        java.util.Calendar cal = java.util.Calendar.getInstance();
        cal.setTime(d);

        return FechaUtil.calendarToString(cal, 0);
}

public static String stringFormatoDDMMYYYY(String Fecha, String Buscar, String Reemplazar){
    Fecha = Fecha.replaceAll(Buscar, Reemplazar);
    return Fecha;
} 
    
public static Date stringaToDateDDMMYYYY(String fecha) {
        try{
                SimpleDateFormat df = new SimpleDateFormat ("dd-MM-yyyy");   
                Date fechadate= getSqlDate(df.parse(fecha));
                SimpleDateFormat df1 = new SimpleDateFormat ("yyyy-MM-dd");  
                String fecharesultante=df1.format(fechadate);
                Date fechadateResultante= getSqlDate(df1.parse(fecharesultante));
                    return fechadateResultante;
                }catch(Exception e){
                    return null;
                }
}

public static Date intToDateDDMMYYYY(int fecha) {
        try{
                SimpleDateFormat df = new SimpleDateFormat ("ddMMyyyy");   
                Date fechadate= getSqlDate(df.parse(String.valueOf(fecha)));
                SimpleDateFormat df1 = new SimpleDateFormat ("dd-MM-yyyy");  
                String fecharesultante=df1.format(fechadate);
                Date fechadateResultante= getSqlDate(df1.parse(fecharesultante));
                    return fechadateResultante;
                }catch(Exception e){
                    return null;
                }
}

public static Date stringToDateDDMMYYYYSin_(String fecha) {
        try{
                SimpleDateFormat df = new SimpleDateFormat ("ddMMyyyy");   
                Date fechadate= getSqlDate(df.parse(fecha));
                SimpleDateFormat df1 = new SimpleDateFormat ("dd-MM-yyyy");  
                String fecharesultante=df1.format(fechadate);
                Date fechadateResultante= getSqlDate(df1.parse(fecharesultante));
                    return fechadateResultante;
                }catch(Exception e){
                    return null;
                }
}


public static int getAnio(Date fecha) {
      GregorianCalendar cal = new GregorianCalendar();
      cal.setTime(fecha);
      return cal.get(java.util.Calendar.YEAR) ;
}
	
public static int getMes(Date fecha) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        return cal.get(Calendar.MONTH) + 1;
}

public static int getAnioActual() {
      Date fecha = new Date();
      GregorianCalendar cal = new GregorianCalendar();
      cal.setTime(fecha);
      return cal.get(java.util.Calendar.YEAR) ;
}
	
public static int getMesActual() {
        Date fecha = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        return cal.get(Calendar.MONTH) + 1;
}

public static int getDiaDelMes(Date fecha) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        return cal.get(Calendar.DAY_OF_MONTH);
}

public static int getDiaDelMes(String fecha) {
        String DiaMes = fecha.substring(0, 2);
        return Integer.parseInt(DiaMes);
}

public static String getDiaDelMesString(String fecha) {
        String DiaMes = fecha.substring(0, 2);
        return DiaMes;
}

public static int getDiadelAnio(Date fecha){
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        return cal.get(Calendar.DAY_OF_YEAR);
    
}

public static int getDiasXAnio(Date fecha){
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        if(cal.get(Calendar.YEAR)%4==0)
            return 366;
        else
            return 365;
     
}

public static Date getDateXDiadelAnio(int dia, int anio){
        try{
              Date date_inicio = FechaUtil.stringaToDateDDMMYYYY("01-01-" + String.valueOf(anio));
              return FechaUtil.sumarCantDiasAFecha(date_inicio, dia -1);
        }
        catch(Exception e){
            return null;
    }
}

public static int getNumeroDiaSemana(Date fecha){
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        return cal.get(Calendar.DAY_OF_WEEK)- 1;
    
}
public static String getNameDay(int dia) {
    String name="";
        switch (dia) {
            case 0:
                name="Domingo";
                break;
            case 1:
                name="Lunes";
                break;
            case 2:
                name="Martes";
                break;
            case 3:
                name="Mi?rcoles";
                break;
            case 4:
                name="Jueves";
                break;
            case 5:
                name="Viernes";
                break;
            case 6:
                name="S?bado";
                break;
        default:
            throw new AssertionError();
    }
    
    
    return name;
}
public static String getNameMonth(int mes) {
//        Crea un Arreglo con los nombres de los meses
//    String [] nombreMeses = new java.text.DateFormatSymbols(new java.util.Locale("ES")) .getMonths();
    
        String name = "";
        switch (mes) {
        case 1:
                name = "Enero";
                break;
        case 2:
                name = "Febrero";
                break;
        case 3:
                name = "Marzo";
                break;
        case 4:
                name = "Abril";
                break;
        case 5:
                name = "Mayo";
                break;
        case 6:
                name = "Junio";
                break;
        case 7:
                name = "Julio";
                break;
        case 8:
                name = "Agosto";
                break;
        case 9:
                name = "Septiembre";
                break;
        case 10:
                name = "Octubre";
                break;
        case 11:
                name = "Noviembre";
                break;
        case 12:
                name = "Diciembre";
                break;
        }
        return name;
}

public static String getFechaDDMMYYYYCadena(int dia, int mes, int ahno) {
//      Ejemplo: Mayo 01, 1979
        DecimalFormat ddformat = new DecimalFormat("00");
        StringBuffer sb = new StringBuffer();

        sb.append(FechaUtil.getNameMonth(mes));
        
        sb.append(" ");
        sb.append(ddformat.format(dia));
        sb.append(",");
        sb.append(" ");
        sb.append(ahno);

        ddformat = null;
        return sb.toString();
}	

public static ArrayList arrayNombresBetweenDate(Date FechaInicio, Date FechaFin){  
//    String [] nombreMeses = new java.text.DateFormatSymbols(new java.util.Locale("ES")) .getMonths();
    ArrayList ArrayNombresCantEntreFechas = new ArrayList();
    int mes;
   
    int diaMes;
    int anio;
    int cantDiaXMes;
    int cantDiaXMesRestantes;
    DiasCalendario NombreMesxCant;
    while (FechaUtil.compareFechasDate(FechaInicio, FechaFin)<= 0) {   
        
        mes = FechaUtil.getMes(FechaInicio);
        String nombreMes = FechaUtil.getNameMonth(mes);
        diaMes = FechaUtil.getDiaDelMes(FechaInicio);
        anio = FechaUtil.getAnio(FechaInicio);
            System.out.println( "Dia "+ diaMes + " Mes: " + nombreMes + " Anio: " + anio);
        if ( mes == FechaUtil.getMes(FechaFin)  &&  anio == FechaUtil.getAnio(FechaFin)){
            cantDiaXMes = FechaUtil.getDiaDelMes(FechaFin) ;
//                System.out.println("1");
        }else{
//            System.out.println("2");
            cantDiaXMes = FechaUtil.cantidadDiasXNombreMes(nombreMes,anio );
        }
            System.out.println("CantDiaXMes: " + cantDiaXMes);
            cantDiaXMes++; //Se aumenta 1 dia + xq se cuenta tambien el dia del inicio
            cantDiaXMesRestantes = cantDiaXMes - diaMes;
            System.out.println("CantidadDiaXMesRestantes: " + cantDiaXMesRestantes);
            NombreMesxCant = new DiasCalendario(nombreMes, cantDiaXMesRestantes);
            ArrayNombresCantEntreFechas.add(NombreMesxCant);
            FechaInicio = FechaUtil.sumarCantDiasAFecha(FechaInicio, cantDiaXMesRestantes);
            System.out.println("Fecha Actualizada: " + FechaInicio);
    }
     
    return ArrayNombresCantEntreFechas;
}

public static String listarFechasEntreRangosFechas(Date FechaInicio, Date FechaFin){
   StringBuilder lstFechas = new StringBuilder(); 
   Date fechaUpdate = null;
    int difDias=0;
    difDias = Integer.parseInt(String.valueOf(FechaUtil.cantidadDiasEntreFechas(FechaFin, FechaInicio)));
     System.out.println("FechaInicio: " + FechaInicio + " FechaFin: " + FechaFin + " difDias: " + difDias);
    lstFechas.append(FechaInicio);
    for (int i = 1; i <= difDias; i++) {
        lstFechas.append(",");
        fechaUpdate = FechaUtil.sumarCantDiasAFecha(FechaInicio, i);
        lstFechas.append(fechaUpdate);
        
    }
    return lstFechas.toString();
}

public static String nombreMesXNumero(String mes) {
        String numeroMes = "";
        if (mes != null) {
                if ("ENERO".equals(mes.toUpperCase()))
                        return "01";
                if ("FEBRERO".equals(mes.toUpperCase()))
                        return "02";
                if ("MARZO".equals(mes.toUpperCase()))
                        return "03";
                if ("ABRIL".equals(mes.toUpperCase()))
                        return "04";
                if ("MAYO".equals(mes.toUpperCase()))
                        return "05";
                if ("JUNIO".equals(mes.toUpperCase()))
                        return "06";
                if ("JULIO".equals(mes.toUpperCase()))
                        return "07";
                if ("AGOSTO".equals(mes.toUpperCase()))
                        return "08";
                if ("SEPTIEMBRE".equals(mes.toUpperCase()))
                        return "09";
                if ("OCTUBRE".equals(mes.toUpperCase()))
                        return "10";
                if ("NOVIEMBRE".equals(mes.toUpperCase()))
                        return "11";
                if ("DICIEMBRE".equals(mes.toUpperCase()))
                        return "12";
        }
        return numeroMes;
}

public static int cantidadDiasXNombreMes(String mes, int ano) {
        int cantidadDias = 0;
        if (mes != null) {

                if ("ENERO".equals(mes.toUpperCase()))
                        return 31;
                if ("FEBRERO".equals(mes.toUpperCase()))
                        if (ano % 4 == 0)
                                return 29;
                        else
                                return 28;
                if ("MARZO".equals(mes.toUpperCase()))
                        return 31;
                if ("ABRIL".equals(mes.toUpperCase()))
                        return 30;
                if ("MAYO".equals(mes.toUpperCase()))
                        return 31;
                if ("JUNIO".equals(mes.toUpperCase()))
                        return 30;
                if ("JULIO".equals(mes.toUpperCase()))
                        return 31;
                if ("AGOSTO".equals(mes.toUpperCase()))
                        return 31;
                if ("SEPTIEMBRE".equals(mes.toUpperCase()))
                        return 30;
                if ("OCTUBRE".equals(mes.toUpperCase()))
                        return 31;
                if ("NOVIEMBRE".equals(mes.toUpperCase()))
                        return 30;
                if ("DICIEMBRE".equals(mes.toUpperCase()))
                        return 31;
        }
        return cantidadDias;
}

public static int cantidadDiasXNumMes(int mes, int ano) {
        int cantidadDias = 0;
        

                if (mes == 1)
                        return 31;
                if (mes == 2)
                        if (ano % 4 == 0)
                                return 29;
                        else
                                return 28;
                if (mes == 3)
                        return 31;
                if (mes == 4)
                        return 30;
                if (mes == 5)
                        return 31;
                if (mes == 6)
                        return 30;
                if (mes == 7)
                        return 31;
                if (mes == 8)
                        return 31;
                if (mes == 9)
                        return 30;
                if (mes == 10)
                        return 31;
                if (mes == 11)
                        return 30;
                if (mes == 12)
                        return 31;
   
        return cantidadDias;
}

public  static Date sumarCantDiasAFecha(Date fecha,int numDias){

      try{
              GregorianCalendar c = new GregorianCalendar();
              c.setTime(fecha);
              c.add(Calendar.DAY_OF_MONTH,numDias);
              return getSqlDate(c.getTime());
      }
    catch(Exception e){
            return null;
    }
}

public  static Date restarCantDiasAFecha(Date fecha,int numDias){

      try{
              numDias = numDias * (-1);
              GregorianCalendar c = new GregorianCalendar();
              c.setTime(fecha);
              c.add(Calendar.DAY_OF_MONTH,numDias);
              return getSqlDate(c.getTime());
      }
    catch(Exception e){
            return null;
    }
}

public static String sumarCantDiasAFecha(String fechaDDMMYYYY, int days) throws Exception {
        // extract the year, month and day
        String sYear = fechaDDMMYYYY.substring(6, 10);
        String sMonth = fechaDDMMYYYY.substring(3, 5);
        String sDay = fechaDDMMYYYY.substring(0, 2);

        int iYear = Integer.parseInt(sYear);
        int iMonth = Integer.parseInt(sMonth);
        int iDay = Integer.parseInt(sDay);
        iMonth--;
        // Convert the String Date to a Calendar Object
        java.util.Calendar cal = java.util.Calendar.getInstance();
        cal.set(iYear, iMonth, iDay);

        // Add (or substract) the given days
        cal.add(Calendar.DATE, days);

        // Convert the Calendar Object to String
        StringBuffer sb = new StringBuffer();

        // Number Formaters
        java.text.DecimalFormat dformat = new java.text.DecimalFormat("00");
        java.text.DecimalFormat yformat = new java.text.DecimalFormat("0000");

        sb.append(dformat.format(cal.get(java.util.Calendar.DATE)));
        sb.append("-");
        sb.append(dformat.format(cal.get(java.util.Calendar.MONTH) + 1));
        sb.append("-");
        sb.append(yformat.format(cal.get(java.util.Calendar.YEAR)));

        return sb.toString();
}

public static int compareFechasDate(java.util.Date fecha1, java.util.Date fecha2){

    /* Verificamos cual es la mayor de las dos fechas, para no tener sorpresas al momento
    * de realizar la resta.
    */
    int resultado=0;
    if (fecha1.compareTo(fecha2) == 0)
        resultado = 0;
    else if (fecha1.compareTo(fecha2) >0)    
        resultado = 1;
    if (fecha1.compareTo(fecha2) < 0)   
        resultado = -1;
    
    return resultado;
}
   
public static int compareFechasStringDDMMYYYY(String DateDDMMYYYY, String DateB) {
    // Si son iguales               return 0
    // DateDDMMYYYY > DateB         return 1
    // DateDDMMYYYY < DateB         return -1
        String DateA = DateDDMMYYYY;
        if (DateA.compareTo(DateB) == 0) {
                // DateA equals DateB
                return 0;
        }

        // Convert both Strings to Calendar Objects
        // extract the year, month and day
        String sYear = DateA.substring(6, 10);
        String sMonth = DateA.substring(3, 5);
        String sDay = DateA.substring(0, 2);

        int iYear = Integer.parseInt(sYear);
        int iMonth = Integer.parseInt(sMonth);
        int iDay = Integer.parseInt(sDay);

        iMonth--;
        java.util.Calendar calendarA = java.util.Calendar.getInstance();
        calendarA.set(iYear, iMonth, iDay);

        sYear = DateB.substring(6, 10);
        sMonth = DateB.substring(3, 5);
        sDay = DateB.substring(0, 2);

        iYear = Integer.parseInt(sYear);
        iMonth = Integer.parseInt(sMonth);
        iDay = Integer.parseInt(sDay);
        iMonth--;
        java.util.Calendar calendarB = java.util.Calendar.getInstance();
        calendarB.set(iYear, iMonth, iDay);

        // compare
        boolean result = calendarA.after(calendarB);

        if (result == true) {
                // DateA is greater than DateB
                return 1;
        } else {
                // DateB is greater than DateA
                return -1;
        }
}

public static long cantidadDiasEntreFechas(Date fechaMayor, Date fechaMenor){

    try{
            final long MS_IN_A_DAY = 3600*24*1000;      //1000*60*60*24;

            java.util.Date date1 = fechaMayor;
            java.util.Date date2 = fechaMenor;
       // System.out.println("date1: " + date1 + " date2: " + date2);
            long diff = date1.getTime() - date2.getTime();
            long numDays = diff/MS_IN_A_DAY;

            return numDays;

    }
    catch(Exception e){
     return 0;
    }
}	

public static long cantidadDiasEntreFechas(java.sql.Date fechaMayor, java.sql.Date fechaMenor){

    try{
            final long MS_IN_A_DAY = 3600*24*1000;      //1000*60*60*24;

            java.util.Date date1 = fechaMayor;
            java.util.Date date2 = fechaMenor;

            long diff = date1.getTime() - date2.getTime();
            long numDays = diff/MS_IN_A_DAY;

            return numDays;

    }
    catch(Exception e){
     return 0;
    }
}

public static boolean verifyStringDate(String fecha) {

        if (fecha == null)
                return false;

        if (fecha.length() != 10)
                return false;

        int year, month, day;
        String xyear, xmonth, xday;

        xyear = fecha.substring(6, 10);
        xmonth = fecha.substring(3, 5);
        xday = fecha.substring(0, 2);

        try {
                year = Integer.parseInt(xyear);
                month = Integer.parseInt(xmonth);
                day = Integer.parseInt(xday);
        } catch (NumberFormatException e) {
                // invalid characters... return false
                return false;
        }

        if (month > 12 || month < 1)
                return false;

        if (day > 31 || day < 1)
                return false;

        // leap year
        boolean leap = false;
        if (year % 4 == 0)
                leap = true;

        if ((month == 2) && (leap == true) && (day > 29))
                return false;

        if ((month == 2) && (leap != true) && (day > 28))
                return false;

        // specific days of the months
        if ((day > 31)
                        && ((month == 1) || (month == 3) || (month == 5)
                                        || (month == 7) || (month == 8) || (month == 10) || (month == 12)))
                return false;

        if ((day > 30)
                        && ((month == 4) || (month == 6) || (month == 9) || (month == 11)))
                return false;

        // if all tests are ok... then return true
        return true;
}

public static String stringFormatoDate(int dd, int mm, int yyyy) {
        StringBuffer sb = new StringBuffer();

        // Number Formaters
        java.text.DecimalFormat dformat = new java.text.DecimalFormat("00");
        java.text.DecimalFormat yformat = new java.text.DecimalFormat("0000");

        sb.append(dformat.format(dd));
        sb.append("-");
        sb.append(dformat.format(mm));
        sb.append("-");
        sb.append(yformat.format(yyyy));

        return sb.toString();
}

public static String formatoDDMMYYYY_YYYYMMDD(String fecha) {
    try{
        SimpleDateFormat df = new SimpleDateFormat ("dd-MM-yyyy");   
        Date fechadate= getSqlDate(df.parse(fecha));
        SimpleDateFormat df1 = new SimpleDateFormat ("yyyy-MM-dd");  
        String fecharesultante=df1.format(fechadate);
            return fecharesultante;	
        }catch(Exception e){
            return null;
        }
}

public static String formatoYYYYMMDD_DDMMYYYY(String fecha) {
    try{
        SimpleDateFormat df = new SimpleDateFormat ("yyyy-MM-dd");   
        Date fechadate= getSqlDate(df.parse(fecha));
        SimpleDateFormat df1 = new SimpleDateFormat ("dd-MM-yyyy");  
        String fecharesultante=df1.format(fechadate);
            return fecharesultante;	
        }catch(Exception e){
            return null;
        }
}

public static String formatoYYYYMMDD_DDMMYYYY(Date fecha) {
    try{
        SimpleDateFormat df = new SimpleDateFormat ("yyyy-MM-dd");   
        Date fechadate= getSqlDate(fecha);
        SimpleDateFormat df1 = new SimpleDateFormat ("dd-MM-yyyy");  
        String fecharesultante=df1.format(fechadate);
            return fecharesultante;	
        }catch(Exception e){
            return null;
        }
}

public static String formatToStringSAP_YYYYMMDD(Date fecha) {
    try{
         Date fechadate= getSqlDate(fecha);
        SimpleDateFormat df1 = new SimpleDateFormat ("yyyyMMdd");  
        String fecharesultante=df1.format(fechadate);
            return fecharesultante;	
        }catch(Exception e){
            return null;
        }
}

//public static String formatToStringSAP_DDMMYYYY(Date fecha) {
//    try{
//         Date fechadate= getSqlDate(fecha);
//        SimpleDateFormat df1 = new SimpleDateFormat ("ddMMyyyy");  
//        String fecharesultante=df1.format(fechadate);
//            return fecharesultante;	
//        }catch(Exception e){
//            return null;
//        }
//}


public static Date formatToDateYYYYMMDD_DDMMYYYY(Date fecha) {
        try{
                SimpleDateFormat df = new SimpleDateFormat ("dd-MM-yyyy");   
                String fecharesultante=df.format(fecha);
                //System.out.println(fecharesultante);
                Date fechadateResultante= getSqlDate(df.parse(fecharesultante));
                    return fechadateResultante;
                }catch(Exception e){
                    return null;
                }
}

public static java.sql.Date formatToDateSqlYYYYMMDD_DDMMYYYY(Date fecha) {
        try{
                SimpleDateFormat df = new SimpleDateFormat ("dd-MM-yyyy");   
                String fecharesultante=df.format(fecha);
                //Date fechadateResultante= getSqlDate(df.parse(fecharesultante));
                    return getSqlDate(df.parse(fecharesultante));
                }catch(Exception e){
                    return null;
                }
}
public static Date formatToDateYYYYMMDD(Date fecha) {
        try{
                SimpleDateFormat df = new SimpleDateFormat ("yyyy-MM-dd");   
                String fecharesultante=df.format(fecha);
                Date fechadateResultante= getSqlDate(df.parse(fecharesultante));
                    return fechadateResultante;
                }catch(Exception e){
                    return null;
                }
}

public static Date formatToDate(Date fecha,String formato) {
        try{
                SimpleDateFormat df = new SimpleDateFormat (formato);   
                String fecharesultante=df.format(fecha);
                Date fechadateResultante= getSqlDate(df.parse(fecharesultante));
                    return fechadateResultante;
                }catch(Exception e){
                    return null;
                }
}

public static java.sql.Date getSqlDate(java.util.Date DateUtil){
			java.sql.Date dsql= new java.sql.Date(DateUtil.getTime());
			return dsql;
}

private static String calendarToString(java.util.Calendar c, int format) {
        // Number Formaters
        java.text.DecimalFormat dformat = new java.text.DecimalFormat("00");
        java.text.DecimalFormat yformat = new java.text.DecimalFormat("0000");

        StringBuffer sb = new StringBuffer();

        sb.append(dformat.format(c.get(java.util.Calendar.DATE)));
        sb.append("-");
        // Remember: in Java, the first month is 0 (January)
        // that is why we must add 1 to the Calender.MONTH result
        sb.append(dformat.format(c.get(java.util.Calendar.MONTH) + 1));
        sb.append("-");
        sb.append(yformat.format(c.get(java.util.Calendar.YEAR)));

        if (format == 1) {
                // add the time
                sb.append(" ");

                sb.append(dformat.format(c.get(java.util.Calendar.HOUR_OF_DAY)));
                sb.append(":");
                sb.append(dformat.format(c.get(java.util.Calendar.MINUTE)));
                sb.append(":");
                sb.append(dformat.format(c.get(java.util.Calendar.SECOND)));
        }

        return sb.toString();
}

public static Timestamp stringToTimestampYYYYMMDD(String s) throws ParseException {
        Timestamp outDate = null;
        if (s != null && s.length() == 10) {
                long time = new SimpleDateFormat("yyyy-MM-dd").parse(s).getTime();
                outDate = new Timestamp(time);
        }
        return outDate;
}

public static Timestamp stringToTimestampYYYYMMDDhhmmss(String s) throws ParseException {
        Timestamp outDate = null;
        if (s != null) {
                long time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(s)
                                .getTime();
                outDate = new Timestamp(time);
        }		
        return outDate;
}


public static String TimestampToStringDDMMYYYY(Timestamp t) {
        if (t == null)
                return new String();

        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
        Date data = new Date(t.getTime());
        return formatter.format(data);

}


public static String timestampToStringYYYY(Timestamp t) {
        if (t == null)
                return new String();

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
        Date data = new Date(t.getTime());
        return formatter.format(data);

}

public static String timestampToStringYYYYMMDDhhmmss(Timestamp t) {
        if (t == null)
                return new String();

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date data = new Date(t.getTime());
        return formatter.format(data);

}

public static String timestampToStringDDMMYYYYhhmm(Timestamp t) {
        if (t == null)
                return new String();

        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm");
        Date data = new Date(t.getTime());
        return formatter.format(data);

}

public static String timestampToStringSAPYYYYMMDD(Timestamp t) {
        if (t == null)
                return new String();

        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
        Date data = new Date(t.getTime());
        return formatter.format(data);
}

public static String timestampToStringDDMMYY(Timestamp t) {
        if (t == null)
                return new String();

        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yy");
        Date data = new Date(t.getTime());
        return formatter.format(data);

}

public static String timestampToStringSAPDDMMYY(Timestamp t) {
        if (t == null)
                return new String();

        SimpleDateFormat formatter = new SimpleDateFormat("ddMMyy");
        Date data = new Date(t.getTime());
        return formatter.format(data);

}

public static Timestamp timestampAddMinutos(Timestamp t, int minutos) {
    //TIENE BUGGGG AL AUMENTAR MINUTOS QUE PASE PARA EL DIA SGTE
        GregorianCalendar cal = new GregorianCalendar();

        cal.setTime(new Date(t.getTime()));
        // return (new Timestamp(cal.getTime().getTime() + minutos *
        // NUMERO_BASE_RELOJ * NUMERO_BASE_MILISEGUNDOS));
        for (int i = 0; i < minutos; i++) {
                if (cal.get(Calendar.MINUTE) != cal
                                .getActualMaximum(Calendar.MINUTE)) {
                        cal.roll(Calendar.MINUTE, true);
                } else if (cal.get(Calendar.HOUR_OF_DAY) != cal
                                .getActualMaximum(Calendar.HOUR_OF_DAY)) {
                        cal.roll(Calendar.HOUR_OF_DAY, true);
                        cal.roll(Calendar.MINUTE, true);
                } else if (cal.get(Calendar.DATE) != cal
                                .getActualMaximum(Calendar.DATE)) {
                        cal.roll(Calendar.DATE, true);
                        cal.roll(Calendar.HOUR_OF_DAY, true);
                        cal.roll(Calendar.MINUTE, true);
                } else if (cal.get(Calendar.MONTH) != cal
                                .getActualMaximum(Calendar.MONTH)) {
                        cal.roll(Calendar.MONTH, true);
                        cal.roll(Calendar.DATE, true);
                        cal.roll(Calendar.HOUR_OF_DAY, true);
                        cal.roll(Calendar.MINUTE, true);
                } else {
                        cal.roll(Calendar.YEAR, true);
                        cal.roll(Calendar.MONTH, true);
                        cal.roll(Calendar.DATE, true);
                        cal.roll(Calendar.HOUR_OF_DAY, true);
                        cal.roll(Calendar.MINUTE, true);
                }
        }
        return (new Timestamp(cal.getTime().getTime()));
}

public static boolean timestampIsIgual(Timestamp t1, Timestamp t2) {
        return (t1.getTime() == t2.getTime());
}

public static boolean timestampIsMenor(Timestamp Menor, Timestamp Mayor) {
        return (Menor.getTime() < Mayor.getTime());
}

public static boolean timestampIsMenorIgual(Timestamp t1, Timestamp t2) {
        return (timestampIsIgual(t1, t2) || timestampIsMenor(t1, t2));
}

public static boolean timestampIsMayor(Timestamp Menor, Timestamp Mayor) {
       return (!timestampIsMenor(Menor, Mayor));
}

public static boolean timestampIsMayorIgual(Timestamp Menor, Timestamp Mayor) {
         return (!timestampIsMenorIgual(Menor, Mayor));
}

public static String timestampToStringDDMMYYYY(java.sql.Timestamp d) {
        String fecha = timestampToString(d, 0);
        if (fecha.equals("00/00/0000 00:00:00"))
                fecha = "";
        return fecha;
}

public static String timestampToString(java.sql.Timestamp d, int format) {
        if (d == null)
                return "00/00/0000 00:00:00";

        // convert to Calendar
        java.util.Calendar cal = java.util.Calendar.getInstance();
        cal.setTime(d);

        return FechaUtil.calendarToString(cal, format);
}

public static String timestampToStringYYYYMMDD(java.sql.Timestamp d) {
        if (d == null)
                return "00/00/0000 00:00:00";

        // convert to Calendar
        java.util.Calendar cal = java.util.Calendar.getInstance();
        cal.setTime(d);
        // Number Formaters
        java.text.DecimalFormat dformat = new java.text.DecimalFormat("00");
        java.text.DecimalFormat yformat = new java.text.DecimalFormat("0000");

        StringBuffer sb = new StringBuffer();

        // Remember: in Java, the first month is 0 (January)
        // that is why we must add 1 to the Calender.MONTH result
        sb.append(yformat.format(cal.get(java.util.Calendar.YEAR)));
        sb.append("-");
        sb.append(dformat.format(cal.get(java.util.Calendar.MONTH) + 1));
        sb.append("-");
        sb.append(dformat.format(cal.get(java.util.Calendar.DATE)));

        return sb.toString();
}

public static String stringTimeToOracleString(String s) {
        if (s.equals("00/00/0000 00:00:00"))
                return "''";

        StringBuffer sb = new StringBuffer();

        sb.append("to_date('");
        sb.append(s.substring(6, 10));
        sb.append("-");
        sb.append(s.substring(3, 5));
        sb.append("-");
        sb.append(s.substring(0, 2));
        sb.append(" ");
        sb.append(s.substring(11, 13));
        sb.append(":");
        sb.append(s.substring(14, 16));
        sb.append(":");
        sb.append(s.substring(17, 19));
        sb.append("','yyyy-mm-dd HH24:MI:SS')");

        return sb.toString();
}


public static String stringToOracleString(String s) {
        if (s.equals("00/00/0000"))
                return "''";

        StringBuffer sb = new StringBuffer();
        if (s.length() == 10) {
                sb.append("to_date('");
                sb.append(s.substring(6, 10));
                sb.append("-");
                sb.append(s.substring(3, 5));
                sb.append("-");
                sb.append(s.substring(0, 2));
                sb.append("','yyyy-mm-dd')");
        }
        return sb.toString();
}


public static String stringToOracleString2(String s) {
        if (s.equals("00/00/0000"))
                return "''";

        StringBuffer sb = new StringBuffer();

        sb.append("to_date(");
        sb.append(s);
        sb.append(",'yyyy-mm-dd')");

        return sb.toString();
}


public static String timestampToStringYYYYMMDDhhmm(Timestamp t) {
        if (t == null)
                return new String();

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        Date data = new Date(t.getTime());
        return formatter.format(data);

}

public static void main(String argv[]) {
    
    try {
        String cadena="";
        long numeroLargo  ;
            
        Date fecha = new Date(); //Fecha Actual Thu Jul 12 14:35:51 COT 2012
            System.out.println("date: " + fecha.toString());
        Date fecha2 = FechaUtil.sumarCantDiasAFecha(fecha,5) ;    
        long lnMilisegundos = fecha.getTime();
            System.out.println("milisegundos: " + lnMilisegundos);
        java.sql.Date sqlDate = new java.sql.Date(lnMilisegundos);
            System.out.println("sqlDate: " + sqlDate);
        java.sql.Time sqlTime = new java.sql.Time(lnMilisegundos);
            System.out.println("sqlTime: " + sqlTime);
        java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(lnMilisegundos);    
            System.out.println("sqlTimestamp: " + sqlTimestamp);

            
        cadena = FechaUtil.getFechaDDMMYYYYCadena(1, 5, 1979) ;
            System.out.println("getFechaDDMMYYYYCadena: " + cadena );
        cadena = FechaUtil.sumarCantDiasAFecha(fecha,5).toString() ;
            System.out.println("SumarNumeroDiasAFecha: " + cadena );
        numeroLargo = FechaUtil.cantidadDiasEntreFechas( fecha2, fecha  ) ;
//            System.out.println("NumeroDiasEntreFechas: " + numeroLargo );    
//            System.out.println("anio: " + FechaUtil.getAnio(fecha));
//            System.out.println("mes: " + FechaUtil.getMes(fecha) );
//            System.out.println("getDia: " + FechaUtil.getDiaDelMes(fecha));
//            System.out.println("stringToTimestampYYYYMMDD: " + FechaUtil.stringToTimestampYYYYMMDD("2012-05-01"));
//            System.out.println("stringToTimestampYYYYMMDDhhmmss: " + FechaUtil.stringToTimestampYYYYMMDDhhmmss("2012-07-12 15:16:27"));
//            System.out.println("SumarNumeroDiasAFecha: " + FechaUtil.sumarCantDiasAFecha("01-05-2012", 20));
//            
//            System.out.println("timestampAddMinutos: " + FechaUtil.timestampAddMinutos(sqlTimestamp,15));
//            System.out.println("compareFechasStringDDMMYYYY: " + FechaUtil.compareFechasStringDDMMYYYY("21-05-2012", "02-05-2012"));
//            System.out.println("timestampToStringYYYYMMDD: " + FechaUtil.timestampToStringYYYYMMDD(sqlTimestamp));
//            System.out.println("FechaActualDDMMYYYYhhmmss: " + FechaUtil.fechaActualDDMMYYYYhhmmss());
//            System.out.println("FormatoDDMMYYYY_YYYYMMDD: " + FechaUtil.formatoDDMMYYYY_YYYYMMDD("01-05-2012"));
//            System.out.println("stringaDateDDMMYYYY: " + FechaUtil.stringaToDateDDMMYYYY("01-05-2012").toString());
            
            System.out.println("Dia del anio a Fecha: " + FechaUtil.getDateXDiadelAnio(60,2011));
            String [] nombreMeses = new java.text.DateFormatSymbols(new java.util.Locale("ES")) .getMonths();
            System.out.println("--: " + nombreMeses[0]);System.out.println("--: " + nombreMeses[1]);
            System.out.println("********************************************************");
            fecha = FechaUtil.stringaToDateDDMMYYYY("01-01-2012");
            fecha2 = FechaUtil.stringaToDateDDMMYYYY("01-12-2013");
            System.out.println("FechaInicio: " + fecha + " - FechaFin: " + fecha2);
            System.out.println("cantidadDiasXNumMes: " + FechaUtil.cantidadDiasXNumMes(2, 2012));
            
            String lstFechas = FechaUtil.listarFechasEntreRangosFechas(FechaUtil.stringaToDateDDMMYYYY("01-05-2012"), FechaUtil.stringaToDateDDMMYYYY("05-05-2012"));
                System.out.println("lstFechas: " + lstFechas);
                System.out.println(FechaUtil.fechaActual());
            ArrayList NombreMesXCant = FechaUtil.arrayNombresBetweenDate(fecha, fecha2);

//            DiasCalendario diasCalendario;
//            Iterator it = NombreMesXCant.iterator();
//            while (it.hasNext()){
//                   diasCalendario = (DiasCalendario) it.next();
//                   System.out.println("Mes: " + diasCalendario.getMes() + " " + diasCalendario.getCantDia() );
//                }
            
//                double d= Math.floor(Double.parseDouble("66.00000"));
//                System.out.println("bbbb: " + d);
//                System.out.println("v " + (int) Math.floor(d));
    } catch (Exception e) {
            e.printStackTrace();
    }
}
	

	
	
}
